home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / glimpse-2.1 / agrep / checkfile.c < prev    next >
C/C++ Source or Header  |  1995-05-16  |  2KB  |  109 lines

  1. /* Copyright (c) 1994 Sun Wu, Udi Manber, Burra Gopal.  All Rights Reserved. */
  2. /*
  3.  *  checkfile.c
  4.  *    takes a file name and checks to see if a file is a regular ascii file
  5.  *
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <ctype.h>
  10. #include <fcntl.h>
  11. #include <sys/types.h>
  12. #include <sys/stat.h>
  13. #include <errno.h>
  14.  
  15. #include "checkfile.h"
  16.  
  17. #define MAXLINE 512
  18.  
  19. extern char Progname[];
  20. extern int errno;
  21.  
  22. unsigned char ibuf[MAXLINE];
  23.  
  24. /**************************************************************************
  25. *
  26. *    check_file
  27. *       input:  filename or path (null-terminated character string)
  28. *       returns: int (0 if file is a regular file, non-0 if not)
  29. *
  30. *    uses stat(2) to see if a file is a regular file.
  31. *
  32. ***************************************************************************/
  33.  
  34. int check_file(fname)
  35. char *fname;
  36.  
  37. {
  38.     struct stat buf;
  39.     int ftype;
  40.  
  41.  
  42.     if (stat(fname, &buf) != 0) {
  43.         if (errno == ENOENT)
  44.             return NOSUCHFILE;
  45.         else
  46.             return STATFAILED;  
  47.     } 
  48.     else {
  49.         /*
  50.               if (S_ISREG(buf.st_mode)) {
  51.                 if ((ftype = samplefile(fname)) == ISASCIIFILE) {
  52.                   return ISASCIIFILE;
  53.                 } else if (ftype == ISBINARYFILE) {
  54.                   return ISBINARYFILE;
  55.                 } else if (ftype == OPENFAILED) {
  56.                   return OPENFAILED;
  57.                 }
  58.               }
  59.               if (S_ISDIR(buf.st_mode)) {
  60.                 return ISDIRECTORY;
  61.               }
  62.               if (S_ISBLK(buf.st_mode)) {
  63.                 return ISBLOCKFILE;
  64.               }
  65.               if (S_ISSOCK(buf.st_mode)) {
  66.                 return ISSOCKET;
  67.               }
  68.         */
  69.         return 0;
  70.     }
  71. }
  72.  
  73. /***************************************************************************
  74. *
  75. *  samplefile
  76. *    reads in the first part of a file, and checks to see that it is
  77. *    all ascii.
  78. *
  79. ***************************************************************************/
  80. /*
  81. int samplefile(fname)
  82. char *fname;
  83. {
  84. char *p;
  85. int numread;
  86. int fd;
  87.  
  88.   if ((fd = open(fname, O_RDONLY)) == -1) {
  89.     fprintf(stderr, "open failed on filename %s\n", fname);
  90.     return OPENFAILED;
  91.   }
  92.  
  93.   -comment- No need to use alloc_buf and free_buf here since always read from non-ve fd -tnemmoc-
  94.   if (numread = fill_buf(fd, ibuf, MAXLINE)) {
  95.    close(fd);
  96.    p = ibuf;
  97.     while (isascii(*p++) && --numread);
  98.     if (!numread) {
  99.       return(ISASCIIFILE);
  100.     } else {
  101.       return(ISBINARYFILE);
  102.     }
  103.   } else {
  104.     close(fd);
  105.     return(ISASCIIFILE);
  106.   }
  107. }
  108. */
  109.